package main

import (
	"chatroom/common/message"
	"encoding/binary"
	"encoding/json"
	"fmt"
	"net"
)

func login(userId int, userPwd string) (err error) {
	// 登录逻辑
	fmt.Printf("userId=%d，userPwd=%s\n", userId, userPwd)

	// 连接到服务器
	conn, err := net.Dial("tcp", "0.0.0.0:8899")
	if err != nil {
		fmt.Println("net.Dial err=", err)
		return
	}

	// 准备好发送给服务器的数据
	var mes message.Message
	mes.MsgType = message.LoginReqType
	// data的数据准备
	var loginReqMes message.LoginReqMessage
	loginReqMes.UserId = userId
	loginReqMes.UserPwd = userPwd
	// 序列化data的数据，并且赋值给mes
	data, err := json.Marshal(loginReqMes)
	if err != nil {
		fmt.Println("json.Marshal err=", err)
		return
	}
	mes.Data = string(data)

	// 序列化mes
	data, err = json.Marshal(mes)
	if err != nil {
		fmt.Println("json.Marshal err=", err)
		return
	}

	// 先发送data的长度给服务器，让服务器进行校验
	var pkgLen uint32
	pkgLen = uint32(len(data))
	var buf [4]byte
	binary.BigEndian.PutUint32(buf[:4], pkgLen)

	// 发送长度
	n, err := conn.Write(buf[:4])
	if n != 4 || err != nil {
		fmt.Println("conn write(bytes) err=", err)
		return
	}

	fmt.Printf("客户端发送消息的长度=%d 内容=%s \n", len(data), string(data))

	// 发送消息本身
	_, err = conn.Write(data)
	if err != nil {
		fmt.Println("conn write(bytes) err=", err)
		return
	}

	// 休眠20
	// time.Sleep(20 * time.Second)
	// fmt.Println("休眠20...")

	// 还需要处理服务器端返回的消息
	mes, err = readPkg(conn)
	if err != nil {
		fmt.Println("client readPkg err=", err)
	}

	var loginResMes message.LoginResMessage
	err = json.Unmarshal([]byte(mes.Data), &loginResMes)
	if loginResMes.Code == 200 {
		fmt.Println("---client 登录成功---", loginResMes.Data)
	} else {
		fmt.Println("---client---", loginResMes.Msg)
	}

	return
}
